// package cn.iocoder.yudao.module.iot.mq.consumer.device;

// import cn.hutool.core.util.StrUtil;
// import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
// import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
// import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber;
// import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
// import cn.iocoder.yudao.module.iot.dal.mysql.device.IotDeviceMapper;
// import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService;
// import cn.iocoder.yudao.module.iot.service.device.property.IotDevicePropertyService;
// import cn.iocoder.yudao.module.iot.service.mqtt.IotMqttServiceImpl;
// import jakarta.annotation.PostConstruct;
// import jakarta.annotation.Resource;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.stereotype.Component;

// /**
//  * 设备阈值设置消息订阅者
//  *
//  * 处理阈值设置消息并发送到MQTT Broker
//  *
//  * @author 芋道源码
//  */
// @Component
// @Slf4j
// public class IotDeviceThresholdMessageSubscriber implements IotMessageSubscriber<IotMqttServiceImpl.ThresholdSettingMessage> {

//     @Resource
//     private IotMessageBus messageBus;
    
//     @Resource
//     private IotDeviceMapper deviceMapper;
    
//     @Resource
//     private IotDeviceMessageService deviceMessageService;
    
//     @Resource
//     private IotDevicePropertyService devicePropertyService;

//     @PostConstruct
//     public void init() {
//         messageBus.register(this);
//     }

//     @Override
//     public String getTopic() {
//         return "/sys/device/threshold";
//     }

//     @Override
//     public String getGroup() {
//         return "iot_device_threshold_consumer";
//     }

//     @Override
//     public void onMessage(IotMqttServiceImpl.ThresholdSettingMessage message) {
//         // 设置租户上下文
//         TenantContextHolder.setIgnore(false);
//         TenantContextHolder.setTenantId(1L); // 默认租户ID为1
        
//         try {
//             log.info("[onMessage][收到阈值设置消息，设备ID: {}, 阈值类型: {}, 阈值数值: {}]", 
//                     message.getDeviceId(), message.getThresholdType(), message.getThresholdValue());

//             // 1. 查询设备信息
//             IotDeviceDO device = deviceMapper.selectById(message.getDeviceId());
//             if (device == null) {
//                 log.error("[onMessage][设备不存在，设备ID: {}]", message.getDeviceId());
//                 return;
//             }
            
//             // 2. 构建阈值设置指令
//             String command = buildThresholdCommand(message);
            
//             // 3. 构建设备控制消息
//             cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage controlMessage = 
//                 cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage.requestOf(
//                     "thing.property.set", // 属性设置方法
//                     java.util.Map.of(
//                         message.getThresholdType() + "_threshold", message.getThresholdValue() // 设置阈值
//                     )
//                 );
            
//             // 设置设备ID
//             controlMessage.setDeviceId(message.getDeviceId());
            
//             // 4. 发送到网关处理 - 使用新的阈值设置处理方法
//             cn.iocoder.yudao.module.iot.core.mq.producer.IotDeviceMessageProducer producer = 
//                 new cn.iocoder.yudao.module.iot.core.mq.producer.IotDeviceMessageProducer(messageBus);
            
//             // 发送到网关，让网关处理MQTT发送
//             producer.sendDeviceMessageToGateway("172_17_0_1_1883", controlMessage);
            
//             log.info("[onMessage][阈值设置指令发送成功，设备ID: {}, 设备名: {}, 产品Key: {}, 阈值类型: {}, 阈值数值: {}, 指令: {}, serverId: 172_17_0_1_1883]", 
//                     message.getDeviceId(), device.getDeviceName(), device.getProductKey(), 
//                     message.getThresholdType(), message.getThresholdValue(), command);
                    
//         } catch (Exception e) {
//             log.error("[onMessage][处理阈值设置消息失败，设备ID: {}, 阈值类型: {}, 阈值数值: {}]", 
//                     message.getDeviceId(), message.getThresholdType(), message.getThresholdValue(), e);
//         } finally {
//             // 清理租户上下文
//             TenantContextHolder.clear();
//         }
//     }

//     /**
//      * 构建阈值设置指令
//      */
//     private String buildThresholdCommand(IotMqttServiceImpl.ThresholdSettingMessage message) {
//         // 根据阈值类型构建不同的指令格式
//         if ("voltage".equals(message.getThresholdType())) {
//             // 电压阈值设置指令
//             return String.format("{\"voltage_threshold\": %.2f}", message.getThresholdValue());
//         } else {
//             // 默认阈值设置指令
//             return String.format("{\"%s_threshold\": %.2f}", message.getThresholdType(), message.getThresholdValue());
//         }
//     }
// } 